package com.bw.task;

import com.bw.domain.Car;
import com.bw.domain.MonthlyCard;
import com.bw.service.CarService;
import com.graphbuilder.curve.CardinalSpline;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.security.access.annotation.Secured;
import org.springframework.stereotype.Component;

import java.util.List;

/**
 * @author bobo棒
 * @date 2025年03月06日 13:15
 *
 * 1.编写定时任务，每天夜间两点执行
 * 2.定时查询数据库的所有状态为正常的车辆信息
 * 3.计算每辆车的剩余有效期（当前时间减去办理日期）
 * 4.如果差值小于等于0，则更新有效期为0天，状态更新为过期，否则只更新有效期
 * 5.如果剩余有效期小于等于10天，则需要将当前车辆信息发送至消息中间件缓存中
 * 6.消费消息中间件缓存中的数据，查询到对应的办理人手机号，进行短信提醒
 * 7.保证消息中间件缓存中的数据不丢失
 * 保证消息中间件缓存中的数据不重复消费
 */

@Component
public class MyTask {
    @Autowired
    CarService carService;
    @Autowired
    RabbitTemplate rabbitTemplate;
    //每天夜间两点执行
 //   @Scheduled(cron = "0 0 2 * * ?")
   // @Scheduled(cron = "35 9 14 * * ?")
    public void listCar(){
      //查询出所有快过期的车辆
    List<MonthlyCard> list= carService.listCar();
    for (MonthlyCard monthlyCard : list) {
        //如果差值小于等于0，则更新有效期为0天，状态更新为过期
         if(monthlyCard.getDays()==0){
             carService.updateStatus(monthlyCard);
         }else{
             //如果剩余有效期小于等于10天，则需要将当前车辆信息发送至消息中间件缓存中
             rabbitTemplate.convertAndSend("DIRECT_EX","roKey",
                     monthlyCard.getPlateNumber()+"-"+monthlyCard.getOwnerPhone()+"-"+monthlyCard.getDays());
         }

      }
    }

}
